﻿/*************************************************
* 描述：自定义列头视图，支持列头颜色绘制
  *
  * File：cxiheaderview.h
  * Author：gaomaolong@mozihealthcare.cn
  * Date：2025-10-21
  * Update：
  ************************************************/
#ifndef CXIHEADERVIEW_H
#define CXIHEADERVIEW_H

#include <QHeaderView>
#include <QColor>

class CxiHeaderView : public QHeaderView
{
	Q_OBJECT

public:
	explicit CxiHeaderView(Qt::Orientation orientation, QWidget* parent = nullptr);

	~CxiHeaderView() override;

	/**
	 * @brief 设置列头颜色
	 * @param logicalIndex 列索引
	 * @param foreColor 前景色
	 */
	void setForeColor(int logicalIndex, const QColor& foreColor);

	/**
	 * @brief 列头背景色
	 * @param logicalIndex 列索引
	 * @param backColor 背景色
	 */
	void setBackColor(int logicalIndex, const QColor& backColor);

protected:
	void mousePressEvent(QMouseEvent* e) override;

	void mouseMoveEvent(QMouseEvent* e) override;

	void mouseReleaseEvent(QMouseEvent* e) override;

	void paintSection(QPainter* painter, const QRect& rect, int logicalIndex) const override;

	void paintEvent(QPaintEvent* e) override;

private:
	/**
	 * @brief 更新列头颜色
	 * @param logicalIndex 列索引
	 * @param opt 列头选项
	 */
	void updateHeaderColor(int logicalIndex, QStyleOptionHeader& opt) const;

	/**
	 * @brief 更新列对齐方式
	 * @param logicalIndex 列索引
	 * @param opt 列头选项
	 */
	void updateTextAlignment(int logicalIndex, QStyleOptionHeader& opt) const;

private:
	QMap<int, QColor> m_headerForeColor;
	QMap<int, QColor> m_headerBackColor;
};

#endif // CXIHEADERVIEW_H